package cn.tedu.fruitshop.service.impl;


import cn.tedu.fruitshop.ex.ServiceException;
import cn.tedu.fruitshop.mapper.MakerMapper;
import cn.tedu.fruitshop.pojo.dto.MakerAddNewDTO;
import cn.tedu.fruitshop.pojo.dto.MakerUpdateDTO;
import cn.tedu.fruitshop.pojo.entity.Maker;
import cn.tedu.fruitshop.pojo.vo.MakerListItemVO;
import cn.tedu.fruitshop.pojo.vo.MakerStandardVO;
import cn.tedu.fruitshop.service.IMakerService;
import cn.tedu.fruitshop.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
public class MakerServiceImpl implements IMakerService {
    @Autowired
    MakerMapper makerMapper;

    public MakerServiceImpl() {
        log.debug("创建业务对象：makerServiceImpl");
    }

    @Override
    public void addNew(MakerAddNewDTO makerAddNewDTO) {
        log.debug("开始处理【添加店铺】的业务，参数：{}", makerAddNewDTO);
        // 从参数对象中获取店铺名称
        String makerName = makerAddNewDTO.getName();
        // 检查店铺名称是否已经被占用（店铺表中是否已经存在此名称的数据）
        log.debug("检查店铺名称是否已经被占用");
        int count = makerMapper.countByName(makerName);
        if (count > 0) {
            // 是：店铺名称已经被占用，添加店铺失败，抛出异常
            String message = "添加店铺失败，店铺名称已经被占用！";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT, message);
        }

        // 否：店铺名称没有被占用，则向店铺表中插入数据
        log.debug("店铺名称没有被占用，将向店铺表中插入数据");
        Maker maker = new Maker();
        BeanUtils.copyProperties(makerAddNewDTO, maker);
        log.debug("即将插入店铺数据：{}", maker);
        int rows = makerMapper.insert(maker);
        if (rows != 1) {
            String message = "服务器炸了,添加数据失败";
            throw new ServiceException(ServiceCode.ERR_INSERT, message);
        }
        log.debug("插入店铺数据完成");
    }




    public void delete(Integer id) {

        MakerStandardVO queryResult = makerMapper.getStandardById(id);
        if (queryResult == null) {
            String message = "删除店铺失败,尝试访问的数据不存在";
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        int rows = makerMapper.deleteById(id);
        if (rows != 1) {
            String message = "服务器炸了,删除数据失败";
            throw new ServiceException(ServiceCode.ERR_INSERT, message);
        }
    }

    public List<MakerListItemVO> list() {
        return makerMapper.list();
    }

    public void updateInfoById(Integer id, MakerUpdateDTO makerUpdateDTO){
            log.debug("开始处理【修改店铺详情】的业务，参数ID：{}, 新数据：{}", id, makerUpdateDTO);

            // 调用Mapper对象的getDetailsById()方法执行查询
            MakerStandardVO queryResult = makerMapper.getStandardById(id);
            // 判断查询结果是否为null
            if (queryResult == null) {
                // 是：此id对应的数据不存在，则抛出异常(ERR_NOT_FOUND)
                String message = "修改店铺详情失败，尝试访问的数据不存在！";
                log.warn(message);
                throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
            }

            Maker maker = new Maker();
            BeanUtils.copyProperties(makerUpdateDTO, maker);
            maker.setId(id);

            // 修改数据
            log.debug("即将修改数据：{}", maker);
            int rows = makerMapper.update(maker);
            if (rows != 1) {
                String message = "修改店铺详情失败，服务器忙，请稍后再次尝试！";
                log.warn(message);
                throw new ServiceException(ServiceCode.ERR_UPDATE, message);
            }
        }
    }
